﻿#define _CRT_SECURE_NO_WARNINGS 1

//void Swap(int& left, int& right)
//{
//	int temp = left;
//	left = right;
//	right = temp;
//}
//
//void Swap(double& left, double& right)
//{
//	double temp = left;
//	left = right;
//	right = temp;
//}
//
//void Swap(char& left, char& right)
//{
//	char temp = left;
//	left = right;
//	right = temp;
//}


//template<class T>
//void Swap(T& x, T& y)
//{
//	T temp = x;
//	x = y;
//	y = temp;
//}



//template<class T>
//
//T Add(const T& x, const T& y)
//{
//	return x + y;
//}
//
//int main()
//{
//	int x = 1, y = 2;
//	double i = 1.1, j = 2.2;
//	Add(x, y);
//	Add(i, j);
//	return 0;
//}
 /* 该语句不能通过编译，因为在编译期间，当编译器看到该实例化时，需要推演其实参类型
     通过实参a1将T推演为int，通过实参d1将T推演为double类型，但模板参数列表中只有
一个T，
     编译器无法确定此处到底该将T确定为int 或者 double类型而报错
    注意：在模板中，编译器一般不会进行类型转换操作，因为一旦转化出问题，编译器就需要
背黑锅

     Add(a1, d1);*/

 





















































































